在順利長出lambda之後,如果想要部署一個golang程式到lambda,接下來可以怎麼做呢?首先需要撰寫程式,可以參考AWS官網上面給的範例,像下面簡單的hello範例。這邊要注意的是,在 AWS Lambda 中,lambda.Start
是用來啟動Lambda函式,它會將指定的處理函式(HandleRequest
)註冊為事件的處理器,HandleRequest
負責處理傳入的事件並回傳結果,所以lambda.Start
和處理函式缺一不可。
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
type MyEvent struct {
Name string `json:"name"`
}
func HandleRequest(ctx context.Context, event *MyEvent) (*string, error) {
if event == nil {
return nil, fmt.Errorf("received nil event")
}
message := fmt.Sprintf("Hello %s!", event.Name)
return &message, nil
}
func main() {
lambda.Start(HandleRequest)
}
寫好之後,下go的指令產生go.mod檔。
go mod init main
然後安裝aws的lambda套件。
go get github.com/aws/aws-lambda-go/lambda
接下來就可以開始build程式碼,這邊要特別注意,執行檔名稱一定要是bootstrap,另外可以用GOARCH參數指定CPU架構。
GOOS=linux GOARCH=arm64 go build -tags lambda.norpc -o bootstrap main.go
build好之後就可以打包成zip檔。
zip example.zip bootstrap
打包完就可以丟上去AWS了。
上傳成功後,可以用Test的功能測試一下能不能順利執行。
執行結果會直接顯示在Test頁面,但這個不會保留,要看之前的結果,要到Monitor查看。
執行完之後,會留下cloudwatch log,可以直接到cloudwatch查,也可以到Monitor那個tab,會列出cloudwatch log的紀錄。
Monitor那邊也有一些cloudwatch metrics可以讓你監控lambda現在的狀態,可以從這邊簡單的觀察lambda是不是有異常,例如Invocations次數是不是高於平均值,Success rate是不是過低。
把metrics放大,可以調整統計參數,像是統計的區間,統計的公式是要用Average或Minumum等等,以及要統計的資料區間。善用這些數字,可以協助發現異常。